{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "67f432e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'title': '\\n跨学科交叉融合，广州软件学院成立数字经济与管理学院（图文）\\n',\n",
       " 'info': '\\n\\n供稿部门：党委宣传部  \\n供稿人：\\n摄影：陈智彬 房小铃\\n编辑：房小铃 复审：钟志坚 审定：胡争\\n发布时间：2023-11-07 23:30\\n\\n\\n',\n",
       " 'body': '\\n\\n本网讯 11月7日，我校举行数字经济与管理学院成立大会暨揭牌仪式，标志着广州软件学院首个二级学院成立。学校校长张强、党委书记兼督导专员刘友坤、副校长徐祥、副校长袁志、党委副书记兼纪委书记张广金、副董事长助理叶倩如，学校有关职能部门主管、系部主任及党总支书记、数字经济与管理学院全体教职员工等200人参会。大会由徐祥主持。\\n\\n\\n\\n\\n\\n\\n\\n成立大会现场\\n\\n\\n\\n徐祥表示，成立数字经济与管理学院是学校进一步优化内部治理结构，创新办学体制，完善学科布局，整合专业资源配置，提高人才培养质量，强化办学优势与特色，适应时代与地方经济产业发展所需而推出的创新举措，符合学校高质量发展的迫切需求，标志着学校办学事业正在向更高层次迈进。\\n\\n\\n会上，刘友坤宣读了数字经济与管理学院及学院党委成立文件、学院领导班子任命文件。原财经系主任唐涌、管理系主任张良卫做了发言。新成立的数字经济与管理学院首任党委书记李文娟、院长刘保庵作表态发言。\\n\\n\\n \\n\\n\\n\\n张强校长、刘保庵院长共同揭牌\\n\\n\\n\\n张强和刘保庵为数字经济与管理学院揭牌，现场响起热烈的掌声。张强代表学校对新学院的成立、新班子的上任表示祝贺，对原管理系、财经系领导班子和师生员工的理解、支持、配合表示感谢。他表示，作为学校办学史上成立的第一个二级学院，数字经济与管理学院的揭牌一定会载入广州软件学院发展的史册。\\n\\n\\n\\n\\n\\n\\n\\n张强校长讲话 \\n\\n\\n\\n张强指出，成立学院是推动学校更好发展的重大战略举措、内在需求和重要抓手。新学院的成立是学校转设以来的重大改革，意义重大，事关学校办学水平的进一步提高，事关学校事业发展的全局，事关学校建成具有品牌特色和比较优势的一流应用型本科高校这一办学目标的实现，将开启学校提升内涵、创新发展的新阶段，必将产生重大而深远的影响。张强从学校20年的办学沉淀和积累，学校发展成长期和瓶颈期面临的新课题新任务，以及从现实与着眼未来发展的需要3个方面分析了成立学院的必要性。他对数字经济与管理学院如何发挥好树立标杆、做出示范的作用充满期待。他要求，新学院一定要明确定位、提升管理、凝聚队伍、谋划发展，要顺应时代发展需求、服务数字中国战略，全面开创新的局面，呈现新的气象。\\n\\n\\n\\n\\n\\n校园鸟瞰图\\n\\n\\n据悉，独立设置数字经济与管理学院在国内高校中并不多见。广州软件学院数字经济与管理学院是由原有的管理系与财经系相关本科专业整合而成的跨学科交叉融合创新型学院。学院现开设有物流管理、工商管理、人力资源管理、市场营销、行政管理、国际经济与贸易、电子商务、财务管理、会计学等9个专业，其中物流管理专业为广东省一流本科专业和省级特色专业。广州软件学院前身是成立于2002年的广州大学华软软件学院，2020年12月，经国家教育部门批准转设为广州软件学院。广州软件学院坚持“以人为本、和谐发展、质量立校、特色强校、依法治校”的办学理念，聚焦IT办学特色，办学成效得到社会认可，社会声誉逐年提升。学校荣获国家级和省级创新创业教育实践基地、国家级备案众创空间建校等各类荣誉。办学21年来，累计为社会培养了5万多名创新型、复合型、应用型人才，被誉为IT人才培养的摇篮。学校现开设包括广东省级一流本科专业软件工程、物联网工程、物流管理在内的31个本科专业，涵盖工学、艺术学、管理学、经济学、文学共5大学科门类，现有本科在校生16000余人。 \\n\\n\\n \\n\\n\\n（供稿：党委宣传部 摄影：陈智彬 房小铃 编辑：房小铃 复审：钟志坚 审定：胡争）\\n '}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import requests\n",
    "from bs4 import BeautifulSoup\n",
    "hd = {'user-agent': 'chrome'}\n",
    "def get_one_article(article_url):\n",
    "    r = requests.get(url, headers=hd)\n",
    "    r.encoding = 'utf-8'\n",
    "\n",
    "    soup = BeautifulSoup(r.text)\n",
    "    title = soup.find('div', class_='article-title')\n",
    "    info = soup.find('div', class_='article-info text-muted')\n",
    "    body = soup.find('div', class_='article-body')\n",
    "\n",
    "    return {\n",
    "            'title':title.get_text(),\n",
    "            'info':info.get_text(),\n",
    "            'body':body.get_text() }\n",
    "url = 'https://news.seig.edu.cn/cms/8135.html' # 测试文章1篇\n",
    "get_one_article(url)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8c225777",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['https://news.seig.edu.cn/cms/8160.html',\n",
       " 'https://news.seig.edu.cn/cms/8159.html',\n",
       " 'https://news.seig.edu.cn/cms/8157.html',\n",
       " 'https://news.seig.edu.cn/cms/8156.html',\n",
       " 'https://news.seig.edu.cn/cms/8153.html',\n",
       " 'https://news.seig.edu.cn/cms/8144.html',\n",
       " 'https://news.seig.edu.cn/cms/8139.html',\n",
       " 'https://news.seig.edu.cn/cms/8135.html',\n",
       " 'https://news.seig.edu.cn/cms/8134.html',\n",
       " 'https://news.seig.edu.cn/cms/8133.html',\n",
       " 'https://news.seig.edu.cn/cms/8127.html',\n",
       " 'https://news.seig.edu.cn/cms/8130.html']"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import requests\n",
    "from bs4 import BeautifulSoup\n",
    "\n",
    "hd = {'user-agent': 'chrome'}\n",
    "def get_one_article(article_url):\n",
    "    r = requests.get(url, headers=hd)\n",
    "    r.encoding = 'utf-8'\n",
    "\n",
    "    soup = BeautifulSoup(r.text)\n",
    "    title = soup.find('div', class_='article-title')\n",
    "    info = soup.find('div', class_='article-info text-muted')\n",
    "    body = soup.find('div', class_='article-body')\n",
    "\n",
    "    return {\n",
    "            'title':title.get_text(),\n",
    "            'info':info.get_text(),\n",
    "            'body':body.get_text() }\n",
    "def get_article_urls(page_url, domain=''):\n",
    "    r = requests.get(url, headers=hd)\n",
    "    r.encoding = 'utf-8'\n",
    "    soup = BeautifulSoup(r.text)\n",
    "    rtn=[]\n",
    "    all_div = soup.find_all('div', class_='media-body')\n",
    "    for div in all_div:\n",
    "        rtn.append(domain+ div.h3.a['href'])\n",
    "    return rtn\n",
    "\n",
    "url = 'https://news.seig.edu.cn/cms/news/1/p/1.html' #测试第一页\n",
    "get_article_urls(url, 'https://news.seig.edu.cn')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1f9ac3bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "### https://news.seig.edu.cn/cms/news/1/p/1.html\n",
      "### https://news.seig.edu.cn/cms/news/1/p/2.html\n",
      ">>> https://news.seig.edu.cn/cms/8160.html\n",
      ">>> https://news.seig.edu.cn/cms/8159.html\n",
      ">>> https://news.seig.edu.cn/cms/8157.html\n",
      ">>> https://news.seig.edu.cn/cms/8156.html\n",
      ">>> https://news.seig.edu.cn/cms/8153.html\n",
      ">>> https://news.seig.edu.cn/cms/8144.html\n",
      ">>> https://news.seig.edu.cn/cms/8139.html\n",
      ">>> https://news.seig.edu.cn/cms/8135.html\n",
      ">>> https://news.seig.edu.cn/cms/8134.html\n",
      ">>> https://news.seig.edu.cn/cms/8133.html\n",
      ">>> https://news.seig.edu.cn/cms/8127.html\n",
      ">>> https://news.seig.edu.cn/cms/8130.html\n",
      ">>> https://news.seig.edu.cn/cms/8132.html\n",
      ">>> https://news.seig.edu.cn/cms/8126.html\n",
      ">>> https://news.seig.edu.cn/cms/8125.html\n",
      ">>> https://news.seig.edu.cn/cms/8121.html\n",
      ">>> https://news.seig.edu.cn/cms/8115.html\n",
      ">>> https://news.seig.edu.cn/cms/8105.html\n",
      ">>> https://news.seig.edu.cn/cms/8113.html\n",
      ">>> https://news.seig.edu.cn/cms/8104.html\n",
      ">>> https://news.seig.edu.cn/cms/8102.html\n",
      ">>> https://news.seig.edu.cn/cms/8100.html\n",
      ">>> https://news.seig.edu.cn/cms/8098.html\n",
      ">>> https://news.seig.edu.cn/cms/8094.html\n"
     ]
    },
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: 'txt/0.txt'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_8232\\505062338.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     54\u001b[0m     \u001b[0marticles\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m \u001b[0mget_one_article\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0murl\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     55\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 56\u001b[1;33m \u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marticles\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_8232\\505062338.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(articles)\u001b[0m\n\u001b[0;32m     37\u001b[0m         \u001b[0mline\u001b[0m\u001b[1;33m+=\u001b[0m\u001b[0marticles\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'title'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     38\u001b[0m         \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'\\n'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 39\u001b[1;33m         \u001b[0msave_one_article\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0marticles\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     40\u001b[0m     \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     41\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_8232\\505062338.py\u001b[0m in \u001b[0;36msave_one_article\u001b[1;34m(i, article)\u001b[0m\n\u001b[0;32m     23\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mrtn\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     24\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msave_one_article\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0marticle\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 25\u001b[1;33m     \u001b[0mf\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'txt/'\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'.txt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'w'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'utf-8'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     26\u001b[0m     \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marticle\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'title'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     27\u001b[0m     \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marticle\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'info'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'txt/0.txt'"
     ]
    }
   ],
   "source": [
    "import requests\n",
    "from bs4 import BeautifulSoup\n",
    "\n",
    "hd = {'user-agent': 'chrome'}\n",
    "def get_one_article(article_url):\n",
    "    r = requests.get(article_url, headers=hd)\n",
    "    r.encoding = 'utf-8'\n",
    "    soup = BeautifulSoup(r.text)\n",
    "    title = soup.find('div', class_='article-title')\n",
    "    info = soup.find('div', class_='article-info text-muted')\n",
    "    body = soup.find('div', class_='article-body')\n",
    "    return {\n",
    "            'title':title.get_text(),\n",
    "            'info':info.get_text(),\n",
    "            'body':body.get_text() }\n",
    "def get_article_urls(page_url, domain=''):\n",
    "    r = requests.get(page_url, headers=hd)\n",
    "    soup = BeautifulSoup(r.text)\n",
    "    rtn=[]\n",
    "    all_div = soup.find_all('div', class_='media-body')\n",
    "    for div in all_div:\n",
    "        rtn.append(domain+ div.h3.a['href'])\n",
    "    return rtn\n",
    "def save_one_article(i,article):\n",
    "    f=open('txt/'+str(i)+'.txt','w',encoding='utf-8')\n",
    "    f.write(article['title'])\n",
    "    f.write(article['info'])\n",
    "    f.write(article['body'])\n",
    "    f.close()\n",
    "def save(articles):\n",
    "    ''' 可保存于txt、excel或数据库中 '''\n",
    "    f=open('统计.csv','w',encoding='utf-8')\n",
    "    f.write('编号,字数,标题\\n')\n",
    "    for i in range(len(articles)):\n",
    "        line=str(i)+','\n",
    "        line+=str(len(articles[i]['body']))+','\n",
    "        line+=articles[i]['title'].strip()\n",
    "        f.write(line+'\\n')\n",
    "        save_one_article(i,articles[i])\n",
    "    f.close()\n",
    "\n",
    "prefix = 'https://news.seig.edu.cn/cms/news/1/p/'\n",
    "# 爬取111 页耗时较久，测试时建议 range(1, 3)\n",
    "page_urls = [prefix + str(i) + '.html' for i in range(1, 3)] \n",
    "article_urls = [] # 解析得，所有文章的 url 列表\n",
    "for page in page_urls:\n",
    "    print('###', page)\n",
    "    tmp = get_article_urls(page, 'https://news.seig.edu.cn')\n",
    "    article_urls.extend( tmp )\n",
    "\n",
    "articles = []     # 爬取得，所有文章title、info、body\n",
    "for url in article_urls:\n",
    "    print('>>>', url)\n",
    "    articles.append( get_one_article(url) )\n",
    "\n",
    "save(articles)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "287c4c9a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8515d2f8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
